package projeto.comercial.gerenciarservico.cdp;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;

import nucleo.comuns.util.UtilitarioSerializacao;

import plataforma.base.cdp.IObjetoComArquivo;
import plataforma.base.cdp.IObjetoComListaArquivo;
import plataforma.base.cdp.ObjetoPersistente;
import projeto.administrativo.colaboradorexterno.cdp.Informacao;
import projeto.administrativo.funcionario.cdp.ResponsavelAtividade;
import projeto.comercial.funcaoservico.cdp.FuncaoServico;

@Entity
public class Atividade extends ObjetoPersistente  implements
IObjetoComListaArquivo{

	private static final long serialVersionUID = UtilitarioSerializacao
			.getIDSerializacao();

	public Atividade() {
		situacao = SituacaoAtividade.NAO_INICIADA;
		avulsa=true;
		podeAlterarData=false;
	}


	int ordemExecucao;

	String descricao;
	SituacaoAtividade situacao;
	Date dataInicio;
	Date dataFim;
	boolean podeAlterarData;
	boolean avulsa;
	Servico servico;
	Set<CheckList> checklists= new HashSet<CheckList>();
	Set<FuncaoServico> funcoes= new HashSet<FuncaoServico>();
	Set<AlocacaoAtividade> alocacoes = new HashSet<AlocacaoAtividade>();
	
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinColumn(name="atividade_id")
	public Set<AlocacaoAtividade> getAlocacoes() {
		return alocacoes;
	}

	public void setAlocacoes(Set<AlocacaoAtividade> alocacoes) {
		this.alocacoes = alocacoes;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	public Set<FuncaoServico> getFuncoes() {
		return funcoes;
	}

	public void setFuncoes(Set<FuncaoServico> funcoes) {
		this.funcoes = funcoes;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	public Set<CheckList> getChecklists() {
		return checklists;
	}

	public void setChecklists(Set<CheckList> checklists) {
		this.checklists = checklists;
	}

	public int getOrdemExecucao() {
		return ordemExecucao;
	}

	public void setOrdemExecucao(int ordemExecucao) {
		this.ordemExecucao = ordemExecucao;
	}


	@ManyToOne(fetch = FetchType.LAZY)
	public Servico getServico() {
		return servico;
	}

	public void setServico(Servico servico) {
		this.servico = servico;
	}

	Set<Informacao> informacoes = new HashSet<Informacao>();

	public boolean isAvulsa() {
		return avulsa;
	}

	public void setAvulsa(boolean avulsa) {
		this.avulsa = avulsa;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
	public Set<Informacao> getInformacoes() {
		return informacoes;
	}

	@OrderBy("data")
	public void setInformacoes(Set<Informacao> informacoes) {
		this.informacoes = informacoes;
	}

	public SituacaoAtividade getSituacao() {
		return situacao;
	}

	public void setSituacao(SituacaoAtividade situacao) {
		this.situacao = situacao;
	}

	public Date getDataInicio() {
		return dataInicio;
	}

	public void setDataInicio(Date dataInicio) {
		this.dataInicio = dataInicio;
	}

	public Date getDataFim() {
		return dataFim;
	}

	public void setDataFim(Date dataFim) {
		this.dataFim = dataFim;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	@Override
	public Set recuperarArquivos() {
		return getInformacoes();
	}
	
	public boolean isPodeAlterarData() {
		return podeAlterarData;
	}

	public void setPodeAlterarData(boolean podeAlterarData) {
		this.podeAlterarData = podeAlterarData;
	}


}
